const request = require('../../utils/request');
const { getUserLocation } = require('../../utils/location');

Page({
  data: {
    phone: '',
    smsCode: '',
    password: '',
    countdown: 0,
    showPasswordForm: false // 控制是否显示密码登录表单
  },

  onPhoneInput(e) {
    this.setData({ phone: e.detail.value });
  },

  onSmsCodeInput(e) {
    this.setData({ smsCode: e.detail.value });
  },

  onPasswordInput(e) {
    this.setData({ password: e.detail.value });
  },

  // 切换到密码登录表单
  handlePasswordLogin() {
    console.log('切换到密码登录表单');
    this.setData({
      showPasswordForm: true,
      smsCode: '',
      password: ''
    });
  },

  // 返回到短信登录
  backToSmsLogin() {
    console.log('返回到短信登录');
    this.setData({
      showPasswordForm: false,
      smsCode: '',
      password: ''
    });
  },

  getSmsCode() {
    const phone = this.data.phone;
    if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
      wx.showToast({ title: '请输入正确手机号', icon: 'none' });
      return;
    }

    this.setData({ countdown: 60 });
    const timer = setInterval(() => {
      this.setData({ countdown: this.data.countdown - 1 });
      if (this.data.countdown === 0) {
        clearInterval(timer);
      }
    }, 1000);

    request({
      url: '/api/auth/send-sms',
      method: 'POST',
      data: { phone }
    }).then((res) => {
      console.log('📱 发送验证码返回:', res);
      if (res.success) {
        wx.showToast({ title: '验证码已发送' });
        if (res.data && res.data.smsCode) {
          console.log('🔢 测试验证码:', res.data.smsCode);
        }
      } else {
        wx.showToast({ title: res.message || '发送失败', icon: 'none' });
      }
    }).catch((err) => {
      console.error('发送验证码失败:', err);
      wx.showToast({ title: '网络错误', icon: 'none' });
    });
  },

  loginWithSms() {
    const { phone, smsCode } = this.data;
    if (!phone || !smsCode) {
      wx.showToast({ title: '请填写完整信息', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '登录中...' });
    request({
      url: '/api/auth/login-with-sms',
      method: 'POST',
      data: { phone, smsCode }
    }).then((res) => {
      wx.hideLoading();
      console.log('🔐 短信登录返回:', res);

      if (res.success) {
        const userId = res.data?.userId;
        console.log('✅ 登录成功，用户ID:', userId);

        if (!userId) {
          wx.showToast({ title: '登录信息异常', icon: 'none' });
          return;
        }

        wx.setStorageSync('userId', userId);
        wx.setStorageSync('userRole', 'order_user');

        const app = getApp();
        app.globalData.userId = userId;
        app.globalData.userRole = 'order_user';
        app.globalData.isLoggedIn = true;

        // 后台初始化一次全局定位（不阻塞跳转）
        getUserLocation().catch((e) => {
          console.warn('初始化定位失败(短信登录):', e);
        });

        wx.showToast({ title: '登录成功' });
        setTimeout(() => {
          wx.reLaunch({ url: '/pages/orderUser/orderUser' });
        }, 1500);
      } else {
        wx.showToast({ title: res.message || '登录失败', icon: 'none' });
      }
    }).catch((err) => {
      wx.hideLoading();
      console.error('登录请求失败:', err);
      wx.showToast({ title: '网络错误', icon: 'none' });
    });
  },

  // 密码登录
  loginWithPassword() {
    const { phone, password } = this.data;

    if (!phone || !password) {
      wx.showToast({ title: '请填写完整信息', icon: 'none' });
      return;
    }

    wx.showLoading({ title: '登录中...' });

    request({
      url: '/api/auth/login-with-password',
      method: 'POST',
      data: { phone, password }
    }).then((res) => {
      wx.hideLoading();
      console.log('🔐 密码登录返回:', res);

      if (res.success) {
        const userId = res.data?.userId;
        console.log('✅ 密码登录成功，用户ID:', userId);

        if (!userId) {
          wx.showToast({ title: '登录信息异常', icon: 'none' });
          return;
        }

        wx.setStorageSync('userId', userId);
        wx.setStorageSync('userRole', 'order_user');

        const app = getApp();
        app.globalData.userId = userId;
        app.globalData.userRole = 'order_user';
        app.globalData.isLoggedIn = true;

        // 后台初始化一次全局定位（不阻塞跳转）
        getUserLocation().catch((e) => {
          console.warn('初始化定位失败(密码登录):', e);
        });

        wx.showToast({ title: '登录成功' });
        setTimeout(() => {
          wx.reLaunch({ url: '/pages/orderUser/orderUser' });
        }, 1500);
      } else {
        wx.showToast({ title: res.message || '登录失败', icon: 'none' });
      }
    }).catch((err) => {
      wx.hideLoading();
      console.error('密码登录请求失败:', err);
      wx.showToast({ title: '网络错误', icon: 'none' });
    });
  },

  // 微信登录功能（支持模拟登录）
  loginWithWechat() {
    console.log('🟢 loginWithWechat 被点击，直接走真实微信登录');
    this.tryRealWechatLogin();
  },

  // 模拟微信登录函数
  mockWechatLogin() {
    console.log('🔧 使用模拟微信登录');
    wx.showLoading({ title: '模拟登录中...' });

    // 创建模拟的用户信息
    const mockUserInfo = {
      nickName: '模拟微信用户' + Math.floor(Math.random() * 1000),
      avatarUrl: '/images/wechat-icon.png',
      gender: Math.floor(Math.random() * 3), // 0:未知, 1:男, 2:女
      country: '中国',
      province: '广东省',
      city: '深圳市',
      language: 'zh_CN'
    };

    console.log('👤 模拟用户信息:', mockUserInfo);

    // 模拟网络延迟
    setTimeout(() => {
      // 发送模拟的请求到后端
      request({
        url: '/api/auth/wechat-login',
        method: 'POST',
        data: {
          code: 'mock_code_' + Date.now(),
          userInfo: mockUserInfo
        }
      }).then((res) => {
        wx.hideLoading();
        console.log('🔐 模拟微信登录返回:', res);

        if (res.success) {
          const userId = res.data?.userId;
          const userInfo = res.data?.userInfo;

          console.log('✅ 模拟微信登录成功，用户ID:', userId);

          wx.setStorageSync('userId', userId);
          wx.setStorageSync('userRole', 'order_user');
          wx.setStorageSync('userInfo', userInfo);

          const app = getApp();
          app.globalData.userId = userId;
          app.globalData.userRole = 'order_user';
          app.globalData.isLoggedIn = true;
          app.globalData.userInfo = userInfo;

          // 后台初始化一次全局定位（不阻塞跳转）
          getUserLocation().catch((e) => {
            console.warn('初始化定位失败(模拟微信登录):', e);
          });

          wx.showToast({ title: '模拟登录成功' });
          setTimeout(() => {
            wx.reLaunch({ url: '/pages/orderUser/orderUser' });
          }, 1000);
        } else {
          wx.showToast({ title: res.message || '模拟登录失败', icon: 'none' });
        }
      }).catch((err) => {
        wx.hideLoading();
        console.error('模拟登录请求失败:', err);
        wx.showToast({ title: '网络错误', icon: 'none' });
      });
    }, 500);
  },

  // 尝试真实微信登录（备用方案）
  tryRealWechatLogin() {
    console.log('🔄 尝试真实微信登录');

    // 检查是否支持wx.getUserProfile
    if (wx.getUserProfile) {
      wx.getUserProfile({
        desc: '用于完善用户资料',
        success: (userProfileRes) => {
          console.log('👤 获取用户信息成功:', userProfileRes.userInfo);

          wx.login({
            success: (loginRes) => {
              console.log('🔑 获取登录凭证成功:', loginRes.code);

              // 先调用小程序登录接口换取 openid，用于后续微信支付
              request({
                url: '/api/auth/wechat-login',
                method: 'POST',
                data: {
                  code: loginRes.code,
                  userInfo: userProfileRes.userInfo
                }
              }).then((res) => {
                wx.hideLoading();
                console.log('🔐 真实微信登录返回:', res);

                if (res.success) {
                  const userId = res.data?.userId;
                  const userInfo = res.data?.userInfo || {};

                  wx.setStorageSync('userId', userId);
                  wx.setStorageSync('userRole', 'order_user');
                  wx.setStorageSync('userInfo', userInfo);

                  const app = getApp();
                  app.globalData.userId = userId;
                  app.globalData.userRole = 'order_user';
                  app.globalData.isLoggedIn = true;
                  app.globalData.userInfo = userInfo;

                  // 后台初始化一次全局定位（不阻塞跳转）
                  getUserLocation().catch((e) => {
                    console.warn('初始化定位失败(微信登录-分支1):', e);
                  });

                  wx.showToast({ title: '微信登录成功' });
                  setTimeout(() => {
                    console.log('➡️ 强制跳转到绑定手机号页');
                    wx.reLaunch({ url: '/pages/bindPhone/bindPhone' });
                  }, 1500);
                } else {
                  wx.showToast({ title: res.message || '登录失败', icon: 'none' });
                }
              }).catch((err) => {
                wx.hideLoading();
                console.error('微信登录请求失败:', err);
                wx.showToast({ title: '网络错误', icon: 'none' });
              });

              wx.showLoading({ title: '登录中...' });
              request({
                url: '/api/auth/wechat-login',
                method: 'POST',
                data: {
                  code: loginRes.code,
                  userInfo: userProfileRes.userInfo
                }
              }).then((res) => {
                wx.hideLoading();
                console.log('🔐 真实微信登录返回:', res);

                if (res.success) {
                  const userId = res.data?.userId;
                  const userInfo = res.data?.userInfo || {};

                  wx.setStorageSync('userId', userId);
                  wx.setStorageSync('userRole', 'order_user');
                  wx.setStorageSync('userInfo', userInfo);

                  const app = getApp();
                  app.globalData.userId = userId;
                  app.globalData.userRole = 'order_user';
                  app.globalData.isLoggedIn = true;
                  app.globalData.userInfo = userInfo;

                  wx.showToast({ title: '微信登录成功' });
                  setTimeout(() => {
                    console.log('➡️ 强制跳转到绑定手机号页');
                    wx.reLaunch({ url: '/pages/bindPhone/bindPhone' });
                  }, 1500);
                } else {
                  wx.showToast({ title: res.message || '登录失败', icon: 'none' });
                }
              }).catch((err) => {
                wx.hideLoading();
                console.error('微信登录请求失败:', err);
                wx.showToast({ title: '网络错误', icon: 'none' });
              });
            },
            fail: (loginErr) => {
              console.error('获取登录凭证失败:', loginErr);
              wx.showToast({ title: '微信登录失败', icon: 'none' });
              // 失败后提供模拟登录选项
              this.showMockLoginOption();
            }
          });
        },
        fail: (profileErr) => {
          console.error('用户拒绝授权或功能不可用:', profileErr);
          wx.showToast({ title: '无法获取用户信息', icon: 'none' });
          // 失败后提供模拟登录选项
          this.showMockLoginOption();
        }
      });
    } else {
      console.error('当前微信版本不支持getUserProfile');
      wx.showToast({ title: '微信版本过低', icon: 'none' });
      // 失败后提供模拟登录选项
      this.showMockLoginOption();
    }
  },

  // 显示模拟登录选项
  showMockLoginOption() {
    setTimeout(() => {
      wx.showModal({
        title: '登录提示',
        content: '微信登录失败，是否使用模拟登录？',
        showCancel: false,
        confirmText: '使用模拟登录',
        success: (res) => {
          if (res.confirm) {
            this.mockWechatLogin();
          }
        }
      });
    }, 1000);
  },

  goToRegister() {
    wx.navigateTo({ url: '/pages/register/register' });
  }
});